package com.example.sneakerappforme1105.dao;

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.Update;

import com.example.sneakerappforme1105.bean.CartItem;

import java.util.List;

@Dao
public interface CartItemDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long insertOneCartItem(CartItem cartItem);  // 防止重复插入,插入前 检查该购物车项是否已经存在

    @Insert
    void insertCartList(List<CartItem> itemList);   // 插入多条购物车项目

    @Query("SELECT * FROM tb_cartItem WHERE cartId= :cartId")
    List<CartItem> queryCartItemByCartId(long cartId);  // 查询当前购物车对应的所有商品条数

    @Query("SELECT * FROM tb_cartItem WHERE goodsId= :goodsId AND size= :size")
    CartItem queryCartItemByGoodsId(long goodsId, String size);

    // 删除购物车记录 长按删除
    @Query("DELETE FROM tb_cartItem WHERE goodsId = :goodsId AND size =:size ")
    void deleteOneCartItem(long goodsId, String size); // 根据商品id来删除记录

    @Query("DELETE FROM tb_cartItem WHERE cartId = :cartId ")
    void deleteAllCartItemByCartId(long cartId); // 删除和当前购物车相关联的购物车

    @Update(onConflict = OnConflictStrategy.REPLACE)// 出现重复记录时替换原记录
    int updateCart(CartItem cartItem); // 更新购物车信息 记得更新 updateCartItem

    default void save(long goodsId, long cartId, double price, String size) {   // 不同的尺码 价格不同
        CartItem cartItem = queryCartItemByGoodsId(goodsId, size);  // 根据商品id 和 size来查询 购物车项
        if (cartItem == null){
            cartItem = new CartItem();
            cartItem.setGoodsId(goodsId);
            cartItem.setCartId(cartId);
            cartItem.setNum(1);
            cartItem.setPrice(price);
        } else{// 存在则更新
            cartItem.setNum(cartItem.getNum()+1);
            updateCart(cartItem);
        }

    }


}
